package com.jxpanda.commons.toolkit;

import com.jxpanda.commons.encrypt.AES;

import java.nio.charset.StandardCharsets;

/**
 * 通常情况使用的AES加密工具
 * 这里只把常用的两个算法实现
 *
 * @author Panda
 */
@SuppressWarnings("AlibabaClassNamingShouldBeCamel")
public class AESKit {

    /**
     * 使用ecb算法加密文本
     */
    public static byte[] encrypt(byte[] content, byte[] keyBytes) {
        return ecb(keyBytes).encrypt(content);
    }

    /**
     * 使用ecb算法加密文本
     */
    public static String encrypt(String content, String key) {
        return ecb(key).encrypt(content);
    }

    /**
     * 使用ecb算法解密文本
     */
    public static byte[] decrypt(byte[] contentBytes, byte[] keyBytes) {
        return ecb(keyBytes).decrypt(contentBytes);
    }

    /**
     * 使用ecb算法解密文本
     */
    public static String decrypt(String content, String key) {
        return ecb(key).decrypt(content);
    }

    /**
     * 使用cbc算法加密文本
     */
    public static byte[] encrypt(byte[] contentBytes, byte[] keyBytes, byte[] ivBytes) {
        return cbc(keyBytes, ivBytes).encrypt(contentBytes);
    }

    /**
     * 使用cbc算法加密文本
     */
    public static String encrypt(String content, String key, String iv) {
        return cbc(key, iv).encrypt(content);
    }

    /**
     * 使用cbc算法解密文本
     */
    public static byte[] decrypt(byte[] contentBytes, byte[] keyBytes, byte[] ivBytes) {
        return cbc(keyBytes, ivBytes).decrypt(contentBytes);
    }

    /**
     * 使用cbc算法解密文本
     */
    public static byte[] decrypt(String content, String key, String iv) {
        return cbc(key, iv).decrypt(content.getBytes(StandardCharsets.UTF_8));
    }

    /**
     * 使用cbc算法解密文本，并且转为字符串（UTF-8编码）
     */
    public static String decryptToString(byte[] contentBytes, byte[] keyBytes, byte[] ivBytes) {
        return new String(decrypt(contentBytes, keyBytes, ivBytes), StandardCharsets.UTF_8);
    }


    private static AES.ECB ecb(byte[] keyBytes) {
        return new AES.ECB(keyBytes);
    }

    private static AES.ECB ecb(String key) {
        return new AES.ECB(key);
    }

    private static AES.CBC cbc(byte[] keyBytes, byte[] ivBytes) {
        return new AES.CBC(keyBytes, ivBytes);
    }

    private static AES.CBC cbc(String key, String iv) {
        return new AES.CBC(key, iv);
    }

    public static void main(String[] args) {
        String content = "k+xU57ilO9DAZVAgxIEXAbUxS+0BlB/2DsQU6lFo9GRfLhhuNcZjLBWtJJGJIHQI+/vB33p3izMKDqsPEVjQE3oQ7/8bcBpiun2sX3klx8mH6l0dqzEg5p0279ZP1nkdCXiVI0khgl7OXO/cS9lowT1gnteQfsSp50btr2kbsDKfNQUF97RvtJ9Lu4YSUO4J/1dpWH/1nOiheWfvVgxn0g==";
        String key = "vL7SyTjHk/g9xqp64zNZ0w==";
        String iv = "QnOv2qBgbwRgyumwBvnDEQ==";
//        System.out.println(cbc(Base64Kit.decode(key),Base64Kit.decode(iv)).decrypt(content));
        System.out.println(new String(decrypt(Base64Kit.decode(content), Base64Kit.decode(key), Base64Kit.decode(iv))));

//        String data = "[{\"invitePhone\":\"13678787878\",\"customerPhone\":\"15887823429\",\"createTime\":1649227661985,\"inviteId\":\"324\",\"customerSex\":\"1\",\"channelName\":\"头条\",\"originalId\":\"3214\",\"projectName\":\"昆明星雅俊园\",\"projectId\":\"98256288852475962\",\"customerName\":\"文化馆\",\"channelId\":\"2342\"}]";
//        System.out.println(AESKit.encrypt(data,key,iv));

    }

}
